import COS from 'cos-js-sdk-v5';

/**
 * 腾讯云COS工具类
 * 用于处理图片上传到腾讯云对象存储
 */
class COSUtil {
  private cos: any;
  private bucket: string = 'lirui-1358047393'; // 存储桶名称，格式：BucketName-APPID
  private region: string = 'ap-chengdu'; // 存储桶所在地域

  constructor() {
    // 初始化COS实例
    this.cos = new COS({
      SecretId: 'AKID34tUu88uU3iIljV3NVQ7bsxpTvAC0a0C',
      SecretKey: '3sXyCByayBF7B2f6LMCqvujNqAQiokU4',
      Protocol: 'https:', // 使用HTTPS协议
    });
    
    console.log('COS实例初始化完成，Bucket:', this.bucket, 'Region:', this.region);
  }

  /**
   * 上传文件到腾讯云COS
   * @param file 要上传的文件对象
   * @returns Promise 返回上传结果，包含图片URL
   */
  uploadFile(file: File): Promise<string> {
    return new Promise((resolve, reject) => {
      // 生成文件路径，使用日期+随机数作为文件名，防止重名
      const date = new Date();
      const year = date.getFullYear();
      const month = String(date.getMonth() + 1).padStart(2, '0');
      const day = String(date.getDate()).padStart(2, '0');
      const random = Math.floor(Math.random() * 10000);
      const key = `images/${year}${month}${day}/${Date.now()}_${random}_${file.name}`;

      // 上传文件
      // 添加更多日志帮助调试
      console.log('开始上传文件:', file.name, '大小:', file.size, 'bytes');
      
      this.cos.putObject({
        Bucket: this.bucket,
        Region: this.region,
        Key: key,
        Body: file,
        // 添加请求头帮助解决CORS问题
        Headers: {
          'Content-Type': file.type,
        },
        onProgress: (progressData: any) => {
          console.log('上传进度：', JSON.stringify(progressData));
        }
      }, (err: any, data: any) => {
        if (err) {
          console.error('COS上传错误:', err);
        }
        if (err) {
          reject(err);
          return;
        }
        
        // 返回文件的访问URL - 使用腾讯云推荐的域名格式
        // 构建访问URL，使用CDN域名
        const cdnUrl = `https://${this.bucket}.cos.${this.region}.myqcloud.com/${key}`;
        // 也可以使用自定义域名，如果有配置的话
        
        console.log('文件上传成功，访问地址:', cdnUrl);
        resolve(cdnUrl);
      });
    });
  }

  /**
   * 批量上传多个文件
   * @param files 文件列表
   * @returns Promise 返回所有图片URL数组
   */
  uploadMultipleFiles(files: File[]): Promise<string[]> {
    const promises = files.map(file => this.uploadFile(file));
    return Promise.all(promises);
  }
}

// 导出COS工具类实例
export const cosUtil = new COSUtil();
export default cosUtil; 